URPでテストシーンを作る際にシーンごとにRenderPipelineが切り替わるようにしたかった
設定の確認
そもそもRenderPipelineSettingsの設定箇所は Graphics → Scriptable Render Pipeline Settings こちらがデフォルトで利用する設定。
次にクオリティ設定により自動で切り替わる場所は Quality → Render Pipeline Asset にあります。
QualityLevelにRenderPipelineAssetが設定されている場合はそちらが優先されるため
- QualityLevelが設定されている場合はQuality設定の方を変更
- Graphicsの設定を変更
の優先度で変更してあげると良さそうです
自動設定
特定のMonobehaviour、テストシーン起動時に自動設定されるようにするには以下のコードだけで良さそうです SerializeFieldにPipelineAssetの参照をつける
差し替わったのをもとに戻さないと挿しっぱなしになるためDisable出戻します
[ExecuteAlways]
public class RenderPipelineSetter : MonoBehaviour
{
/* Define & Class */
/* Public Field */
/* Private Field */
[SerializeField] private UniversalRenderPipelineAsset _pipelineAsset;
private RenderPipelineAsset _prevPipelineAsset;
private bool _isQualitySettings;
/* Property */
/* Public Method */
/* Private Method */
/* Monobehaviour */
void OnEnable()
{
Apply();
}
void OnDisable()
{
Reset();
}
private void Apply()
{
if (_pipelineAsset == null) return;
if (QualitySettings.renderPipeline != _pipelineAsset)
{
_isQualitySettings = true;
_prevPipelineAsset = QualitySettings.renderPipeline;
QualitySettings.renderPipeline = _pipelineAsset;
}
else if (GraphicsSettings.renderPipelineAsset != _pipelineAsset)
{
_isQualitySettings = false;
_prevPipelineAsset = GraphicsSettings.renderPipelineAsset;
GraphicsSettings.renderPipelineAsset = _pipelineAsset;
}
}
private void Reset()
{
if (_prevPipelineAsset == null) return;
if (_isQualitySettings)
{
QualitySettings.renderPipeline = _prevPipelineAsset;
}
else
{
GraphicsSettings.renderPipelineAsset = _prevPipelineAsset;
}
}
}
参考
https://docs.unity3d.com/ja/2021.2/Manual/srp-setting-render-pipeline-asset.html